package com.ruoyi.order.mapper;

import com.ruoyi.order.domain.VerCart;
import com.ruoyi.order.domain.VerCartDto;
import com.ruoyi.order.domain.VerCartItem;
import com.ruoyi.order.domain.dto.SkuCartItemDto;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;

/**
 * 购物车Mapper接口
 *
 * @author ruoyi
 * @date 2025-08-21
 */
@Mapper
public interface VerCartMapper {
    /**
     * 查询购物车
     *
     * @param id 购物车主键
     * @return 购物车
     */
    public VerCart selectVerCartById(Long id);

    /**
     * 查询购物车列表
     *
     * @param verCart 购物车
     * @return 购物车集合
     */
    public List<VerCart> selectVerCartList(VerCart verCart);

    /**
     * 新增购物车
     *
     * @param verCartDto 购物车
     * @return 结果
     */
    public int insertVerCart(VerCartDto verCartDto);

    /**
     * 修改购物车
     *
     * @param verCart 购物车
     * @return 结果
     */
    public int updateVerCart(VerCart verCart);

    /**
     * 删除购物车
     *
     * @param id 购物车主键
     * @return 结果
     */
    public int deleteVerCartById(Long id);

    /**
     * 批量删除购物车
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteVerCartByIds(Long[] ids);

    /**
     * 获取最大ID
     *
     * @return 最大ID值
     */
    public Long getMaxId();

    /**
     * 根据用户id获取分组后的购物车视图
     */
    List<VerCartDto> listByUserId(Long userId);


    @Select("select max(cart_item_id) from ver_cart_item")
    Long getMaxCartItemId();


    int insertVerCartItem(VerCartItem cartItem);

    /**
     * 返回当前用户所有的购物车子项
     */
    List<SkuCartItemDto> getCartItem(Long userId);

    @Update("update ver_cart_item set is_delete = 1 where cart_item_id = #{cartItemId}")
    Long logicalDelete(Long cartItemId);
}
